package com.maket.jbxx.service.impl;

import java.util.List;

import com.maket.jbxx.domain.CpAttributeType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import com.ruoyi.common.core.utils.StringUtils;
import org.springframework.transaction.annotation.Transactional;
import com.maket.jbxx.domain.SxAttributeValue;
import com.maket.jbxx.mapper.SxProductAttributeMapper;
import com.maket.jbxx.domain.SxProductAttribute;
import com.maket.jbxx.service.ISxProductAttributeService;

/**
 * 属性值Service业务层处理
 * 
 * @author ruoyi
 * @date 2024-07-02
 */
@Service
public class SxProductAttributeServiceImpl implements ISxProductAttributeService 
{
    @Autowired
    private SxProductAttributeMapper sxProductAttributeMapper;


    /**
     * 查询属性值
     * 
     * @param sxCode 属性值主键
     * @return 属性值
     */
    @Override
    public SxProductAttribute selectSxProductAttributeBySxCode(String sxCode)
    {
        return sxProductAttributeMapper.selectSxProductAttributeBySxCode(sxCode);
    }

    /**
     * 查询属性值列表
     * 
     * @param sxProductAttribute 属性值
     * @return 属性值
     */
    @Override
    public List<SxProductAttribute> selectSxProductAttributeList(SxProductAttribute sxProductAttribute)
    {
        return sxProductAttributeMapper.selectSxProductAttributeList(sxProductAttribute);
    }

    /**
     * 查询分类值列表
     *
     */
    @Override
    public SxProductAttribute selectCpAttributeTypeBySxCode(String code) {
        return sxProductAttributeMapper.selectCpAttributeTypeBySxCode(code);
    }

    /**
     * 新增属性值
     * 
     * @param sxProductAttribute 属性值
     * @return 结果
     */
    @Transactional
    @Override
    public int insertSxProductAttribute(SxProductAttribute sxProductAttribute)
    {
        int rows = sxProductAttributeMapper.insertSxProductAttribute(sxProductAttribute);
        insertSxAttributeValue(sxProductAttribute);

        return rows;
    }

    /**
     * 修改属性值
     * 
     * @param sxProductAttribute 属性值
     * @return 结果
     */
    @Transactional
    @Override
    public int updateSxProductAttribute(SxProductAttribute sxProductAttribute)
    {
        sxProductAttributeMapper.deleteCpAttributeTypeBySxCode(sxProductAttribute.getSxCode());
        insertCpAttributeType(sxProductAttribute);

        sxProductAttributeMapper.deleteSxAttributeValueBySxCode(sxProductAttribute.getSxCode());
        insertSxAttributeValue(sxProductAttribute);
        return sxProductAttributeMapper.updateSxProductAttribute(sxProductAttribute);
    }

    @Override
    public int updateSxProductAttributeIsStart(SxProductAttribute sxProductAttribute) {
        return sxProductAttributeMapper.updateSxProductAttributeIsStart(sxProductAttribute);
    }

    /**
     * 批量删除属性值
     * 
     * @param sxCodes 需要删除的属性值主键
     * @return 结果
     */
    @Transactional
    @Override
    public int deleteSxProductAttributeBySxCodes(String[] sxCodes)
    {
        return sxProductAttributeMapper.deleteSxProductAttributeBySxCodes(sxCodes);
    }

    /**
     * 删除属性值信息
     * 
     * @param sxCode 属性值主键
     * @return 结果
     */
    @Transactional
    @Override
    public int deleteSxProductAttributeBySxCode(String sxCode)
    {
        return sxProductAttributeMapper.deleteSxProductAttributeBySxCode(sxCode);
    }

    /**
     * 新增属性值信息
     * 
     * @param sxProductAttribute 属性值对象
     */
    public void insertSxAttributeValue(SxProductAttribute sxProductAttribute)
    {
        List<SxAttributeValue> sxAttributeValueList = sxProductAttribute.getSxAttributeValueList();
        String sxCode = sxProductAttribute.getSxCode();
        if (StringUtils.isNotNull(sxAttributeValueList))
        {
            List<SxAttributeValue> list = new ArrayList<SxAttributeValue>();
            for (SxAttributeValue sxAttributeValue : sxAttributeValueList)
            {
                sxAttributeValue.setSxCode(sxCode);
                list.add(sxAttributeValue);
            }
            if (list.size() > 0)
            {
                sxProductAttributeMapper.batchSxAttributeValue(list);
            }
        }
    }



    /**
     * 新增属性与分类信息
     *
     * @param sxProductAttribute 属性值对象
     */
    public void insertCpAttributeType(SxProductAttribute sxProductAttribute)
    {
        sxProductAttribute.getSxAttributeValueListCpType().forEach(p -> p.setSxCode(sxProductAttribute.getSxCode()));
        sxProductAttribute.getSxAttributeValueListCpType().forEach(p->p.setProductTypeCode(p.getCpflCode()));

        List<CpAttributeType> cpAttributeTypeList = sxProductAttribute.getSxAttributeValueListCpType();
        String sxCode = sxProductAttribute.getSxCode();
        if (StringUtils.isNotNull(cpAttributeTypeList))
        {
            List<CpAttributeType> list = new ArrayList<CpAttributeType>();
            for (CpAttributeType cpAttributeType : cpAttributeTypeList)
            {
                cpAttributeType.setSxCode(sxCode);
                list.add(cpAttributeType);
            }
            if (list.size() > 0)
            {
                sxProductAttributeMapper.batchCpAttributeType(list);
            }
        }
    }

}
